package com.itheima.d2_lambda;

import com.itheima.d1_arrays.bean.Student;
import java.util.Arrays;
import java.util.Comparator;
import java.util.function.IntToDoubleFunction;

/*
 * Lambda格式：
 * (参数列表)->{方法体}
 * <p>
 * 参数列表列表省略规则：
 * 1. 如果有参，那么参数的类型可以省略。   (int a,int b)->{ }   ==>  (a,b)->{}
 * 2. 如果只有一个参数，参数类型和括号都可以省略   (int a)->{}   ==>  a ->{}
 * 3. 如果无参，括号不能省
 * 方法体省略规则：
 * 1. 如果方法体中只有一个语句。此时 大括号和分号如果有return语句，都可以一并省略(不能单独只省略一部分)。
      (int a,int b) ->{
        return a+b;
      }

      简化后：
        (a,b) -> a+ b
 */
public class LambdaTest2 {
    public static void main(String[] args) {
        // 目标：使用Lambda简化函数式接口。
        double[] prices = {99.8, 128, 100};

        Arrays.setAll(prices, new IntToDoubleFunction() {
            @Override
            public double applyAsDouble(int value) {
                // value是索引 0  1  2
                return prices[value] * 0.8;
            }
        });

        //匿名内部类简化为Lambda
        Arrays.setAll(prices,(int value) -> {
            return prices[value] * 0.8;
        });
        //简化参数
        Arrays.setAll(prices,value -> {
            return prices[value] * 0.8;
        });
        //简化方法体
        Arrays.setAll(prices,value -> prices[value] * 0.8);
        System.out.println("----------------------------------------------------------");

        Student[] students = new Student[4];
        students[0] = new Student("蜘蛛精", 169.5, 23);
        students[1] = new Student("紫霞", 163.8, 26);
        students[2] = new Student("紫霞", 163.8, 26);
        students[3] = new Student("至尊宝", 167.5, 24);

        Arrays.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return Double.compare(o1.getHeight(), o2.getHeight()); // 升序
            }
        });

        //匿名内部类简化为Lambda
        Arrays.sort(students, (Student o1, Student o2) -> {
                return Double.compare(o1.getHeight(), o2.getHeight()); // 升序
            }
        );
        //简化参数
        Arrays.sort(students, (o1, o2) -> {
                    return Double.compare(o1.getHeight(), o2.getHeight()); // 升序
                }
        );
        //简化方法体
        Arrays.sort(students, (o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight()));

    }
}
